#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
const int N=1e3+10;


struct node{
	int x,y,z;
};
double e[N][N];
int n;
double dist[N];
int st[N];
vector<node> v;
double get_w(int i,int j)
{
	int x1=v[i].x,y1=v[i].y,h1=v[i].z;
	int x2=v[j].x,y2=v[j].y,h2=v[j].z;
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+(h1-h2)*(h1-h2);
}

double prim()
{
	double ret=0;
	memset(st,0,sizeof(st));
	dist[0]=0;
	for(int i=0;i<n;i++)
	{
		int t=-1;
		for(int j=0;j<n;j++)
		{
			if(!st[j] &&(t==-1 ||dist[j]<dist[t]))
				t=j;
		}
		ret+=dist[t];
		st[t]=1;
		for(int j=0;j<n;j++)
		{
			dist[j]=min(dist[j],e[t][j]);
		}
	}	
	return ret;
}
int main()
{
	
	cin>>n;
	
	for(int i=0;i<n;i++)
	{
		dist[i]=0x3f3f3f3f;
		node t;
		scanf("%d%d%d",&t.x,&t.y,&t.z);
		v.push_back(t);
	}
	
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			e[i][j]=e[j][i]=get_w(i,j);
		}
	}
	printf("%.2lf",prim());
	return 0;
}
